package com.wc.acwing_sunday.数学知识.奶牛过马路;

import java.util.Scanner;

/**
 * @Author congge
 * @Date 2024/4/13 23:14
 * @description https://www.acwing.com/problem/content/5572/
 */
public class Main {
    /**
     * 情况1: 车没过去的时候, 牛莽过去了
     * 车内的点为(x , y), 则相当于牛到达y的时候,车内的点还未到达
     * y / u <= x / v => y <= (u / v) * x,  k = u / v
     * => y <= k * x, 也就是车在这条直线的下方
     * <p>
     * 情况2: 车已经过去了, 牛莽的时候
     * 车内的点为(x, y), 则相当于牛到达y的时候,车内的点已经过去了
     * y / u >= x / v => y <= k * x, 也就是车在这条直线的上方
     * <p>
     * 情况3: 车相交了, 那我们是不是可以等待一段时间，使得车在y = k * x的上方, 同情况2
     * 单是需要转换一下思路, 也就是我们往后退b的长度, 再开始莽
     * (y - b) / u >= x / v
     * => y >= (u / v) * x + b
     * => y >= k * x + b
     * => b <= y - k * x, 相当于b小于所有点的最小值
     * 理论成立, 开始代码
     */
    static Scanner sc = new Scanner(System.in);
    static int n, w, v, u;
    static double eps = 1e-8;

    static int dcmp(double a, double b) {
        if (Math.abs(b - a) < eps) return 0;
        if (a > b) return 1;
        return -1;
    }

    public static void main(String[] args) {
        n = sc.nextInt();
        w = sc.nextInt();
        v = sc.nextInt();
        u = sc.nextInt();
        double k = 1.0 * u / v;
        double b = 0;
        boolean allRight = true, allLeft = true;
        while (n-- > 0) {
            int x = sc.nextInt(), y = sc.nextInt();
//            System.out.println(y - k * x);
            if (dcmp(y, k * x) > 0) allRight = false;
            if (dcmp(y, k * x) < 0) allLeft = false;
            b = Math.min(b, y - k * x);
        }
        if (allLeft || allRight) System.out.println(1.0 * w / u);
        else System.out.println((w - b) / u);
    }
}
